package top.infopub.mgr.bpa.service;


import java.util.List;

import top.infopub.generic.GenericService;
import top.infopub.mgr.bpa.domain.ProContractDomain;
import top.infopub.mgr.bpa.vo.ProContractVo;
import top.infopub.mgr.bpast.domain.BpastContractDomain;
import top.infopub.model.bpa.ProContract;
import top.infopub.model.bpa.ProContractAtt;
import top.infopub.model.bpa.ProContractDetail;
import top.infopub.model.bpa.ProContractInvest;
import top.infopub.model.bpa.ProContractSub;
import top.infopub.model.bpa.ProContractUla;

import com.github.pagehelper.Page;


public interface ProContractService extends GenericService<ProContract, String> {

    /**
     * 根据条件查询项目合同记录
     * @param ProContract
     * @return 
     * @see
     */
    Page<ProContractDomain> selectByDomainWhere(Page<ProContractDomain> page,
                                                ProContractVo proContractVo);

    /**
     * 根据条件查询对外项目合同记录--我审批的列表
     * @param ProContractVo
     * @return 
     * @see
     */
    Page<ProContractDomain> selectMyCheckByDomainWhere(Page<ProContractDomain> page,
                                                       ProContractVo proContractVo);

    ProContractVo queryById(String id);

    /**
     * 添加 项目合同信息
     */
    void saveProContract(ProContract proContract, ProContractInvest proContractInvest,
                         List<ProContractUla> proContractUlas,
                         List<ProContractSub> proContractSubs,
                         List<ProContractDetail> proContractDetails,
                         List<ProContractAtt> proContractAtts);

    /**
     * 根据项目合同名称判断是否存在
     */
    List<ProContract> isExistContractName(String contractName,String proCode);

    /**
     * 查询项目合同信息 并且项目没有发起过继承协议
     */
    List<ProContract> selectAllUsableProContract(String ids, String proCode);

    /**
     * 根据项目编号，查询项目合同信息
     */
    ProContractDomain selectByContractProCode(String proCode);

    /**
     * 根据合同签订日期 判断是否为  补充签订
     */
    ProContract selectContractSignDate();
    
    /**
     * 查询项目合同信息(其他费合同)
     */
    List<ProContract> selectAllContracts(String ids,String proCode);
    
    /**
     * 查询项目合同信息
     */
    List<ProContract> selectProContracts(String ids,String proCode);
    
    /**
     * 根据项目合同id查询信息(详情页)
     */
    ProContractVo queryByIds(String id);
    
    /**
     * 补充签订
     */
    void sign(ProContractVo proContractVo,List<ProContractAtt> proContractAtts);
    
    /**
     * 根据条件查询商务驾驶舱-项目合同分页记录
     * @param page 分页参数
     * @param type 公司类型
     * @param orgId 公司id
     * @param proName 项目名称
     * @param extType 合同类别
     * @param contractName 合同名称
     * @return 
     * @see
     */
    Page<BpastContractDomain> selectBpastByDomainWhere(Page<BpastContractDomain> page,String type, String orgId,
        String proName,String extType,String contractName);
    
    /**
     * 判断项目名称是否存在
     */
    ProContract isExistProName(String proCode);

}